home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / ippon / source.lzh / FuncEnemy / zakob.c < prev   
C/C++ Source or Header  |  2000-07-07  |  3KB  |  138 lines

  1. /* zakob.c */
  2.  
  3. #include <xsp2lib.h>
  4.  
  5. #include "../main.h"
  6. #include "../player.h"
  7. #include "../enemy.h"
  8. #include "../eshot.h"
  9. #include "../effect.h"
  10. #include "../psearch.h"
  11. #include "../sound.h"
  12.  
  13.  
  14. /* 関数プロトタイプ宣言 */
  15. static short EnemyMoveZakoB (ENEMY *);
  16. static void EnemyFreeZakoB (ENEMY *);
  17.  
  18.  
  19. /* 初期化ルーチン */
  20. void EnemyAllocZakoB (ENEMY * p)
  21. {
  22.     /* 左右どちらから出現したか */
  23.     if (SHORT_LX < 144)
  24.         p->vx = 65536;
  25.     else
  26.         p->vx = -65536;
  27.     p->vy = 1 * 65536;
  28.  
  29.     p->pt = obj_zako02;
  30.     p->info = 0x0800 | PRIORITY_ZAKO;    /* 数値を決めうちして入れるのはよくない */
  31.     p->hit_sx = 12;        /* 自機ショットに対する当たり判定 */
  32.     p->hit_sy = 12;
  33.     p->hp = 1;        /* 耐久力 */
  34.     p->damage = 0;
  35.     p->damage_mode = DAMAGE_THROUGH;
  36.     p->func_enemy_move = EnemyMoveZakoB;
  37.     p->func_enemy_free = EnemyFreeZakoB;
  38.  
  39.     p->s_work = 0;        /* ショット用ワークを初期化 */
  40.  
  41.     /* コア関連 */
  42.     p->core_info = PALET_CORE_BLUE | PRIORITY_ZAKO;
  43.     p->core_pt = sp_core + 1;
  44.  
  45.     p->m_work = 0;
  46.     p->m_work2 = 0;
  47. }
  48.  
  49.  
  50.  
  51. /* 移動ルーチン */
  52. /* 返り値:非0なら消去 */
  53. static short EnemyMoveZakoB (ENEMY * p)
  54. {
  55.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  56.     p->x = (p->lx += p->vx) >> 16;
  57.     p->y = (p->ly += p->vy) >> 16;
  58.  
  59.     /* 敵をくるくる回すアニメーション */
  60.     p->pt++;
  61.     if (p->pt > obj_zako02 + 15)
  62.         p->pt = obj_zako02;
  63.  
  64.     switch (p->m_work) {
  65.     case 0:
  66.         if (p->m_work2++ > 96)
  67.             p->m_work++;
  68.         break;
  69.  
  70.         /* X方向の動きを止める */
  71.     case 1:
  72.         if (p->vx > 0) {
  73.             if (p->vx > 4096)
  74.                 p->vx -= 2048;
  75.             else
  76.                 p->m_work++;
  77.         } else {
  78.             if (p->vx < 4096)
  79.                 p->vx += 2048;
  80.             else
  81.                 p->m_work++;
  82.         }
  83.         break;
  84.     case 2:
  85.         EshotAlloc (ESHOT_NRG02, p->x, p->y, 8, 64, 0);        /* 弾を撃つ */
  86.         p->m_work++;
  87.         p->m_work2 = 0;
  88.         break;
  89.         /* しばらく直進 */
  90.     case 3:
  91.         if (p->m_work2++ > 60)
  92.             p->m_work++;
  93.         break;
  94.         /* 再びX方向に動き出す */
  95.     case 4:
  96.         if (p->vx > 0) {
  97.             if (p->vx < 1 * 65536)
  98.                 p->vx += 4096;
  99.             else
  100.                 p->m_work++;
  101.         } else {
  102.             if (p->vx > 1 * 65536)
  103.                 p->vx -= 4096;
  104.             else
  105.                 p->m_work++;
  106.         }
  107.         break;
  108.     case 5:
  109.         if (SHORT_LY > 256 + 32)
  110.             return (-1);    /* Y座標が 256+32 以上なら消去 */
  111.         break;
  112.     }
  113.  
  114.  
  115.     /* もし前回ダメージを受けたなら */
  116.     if (p->damage) {
  117.         p->damage = 0;
  118.         EffectAlloc (EFFECT_EXPLZAKO, 0, p->x, p->y);    /* 爆発パターンを出現させる */
  119.         EffectAlloc (EFFECT_POINTS, points_table[p->shot_count], p->x, p->y);    /* 得点を出現させる */
  120.         SoundSetSE (SE_EXPL);    /* ザコ爆発音 */
  121.         return (-1);
  122.     }
  123.     xobj_set_st (p);    /* 表示 */
  124.  
  125.     /* コアの表示 */
  126.     p->core_x = p->x - 8;
  127.     p->core_y = p->y - 8;
  128.     xsp_set_st (&(p->core_x));
  129.  
  130.     return (0);
  131. }
  132.  
  133.  
  134. /* 消去ルーチン */
  135. static void EnemyFreeZakoB (ENEMY * p)
  136. {
  137. }
  138.